﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Dominio;
using Log4Net;

namespace HotelGUI
{
    
    public partial class Reservas : Form
    {
        private ISistema sistema =  Dominio.Fabrica.getSistema();
        private ILog log = FactoryLogs.getLogInstance();
        

        public Reservas()
        {
            
            InitializeComponent();
        }

        public Reservas(int NumReserva,int idCliente, int NroHabitacion)
        {
            InitializeComponent();
            try
            {
                this.nroReserva.Text = NumReserva.ToString();
                this.idCliente.Text = idCliente.ToString();
                this.numero.Text = NroHabitacion.ToString();
                string[] datosReserva = sistema.obtenerReserva(NumReserva);
                this.fchin.Value = DateTime.Parse(datosReserva[1]);
                this.fchout.Value = DateTime.Parse(datosReserva[2]);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            
        }

        public void setCliente(String idCli, String Nom, String Apel)
        {
            idCliente.Text = idCli;
            nombre.Text = Nom;
            apellido.Text = Apel;
        }

        private void CheckIn_Click(object sender, EventArgs e)
        {
            //TODO: try catch cuando no hay reserva seleccionada
            try
            {
                if (sistema.existeReserva(int.Parse(nroReserva.Text.Trim())))
                {
                    sistema.realizarCheckIn(int.Parse(nroReserva.Text.Trim()));
                    log.info(sistema.obtenerIdUsuarioLogueado(), "CHECK IN. IdReserva: " + nroReserva.Text.Trim() + " - IdCliente: " + idCliente.Text.Trim() + " - NumHabitacion: " + numero.Text.Trim());
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void CheckOut_Click(object sender, EventArgs e)
        {
            
            Checkout chk = new Checkout();
            chk.ShowDialog();
        }

        private void Validar_Click(object sender, EventArgs e)
        {
            string[] lst;
            int id = int.Parse(idCliente.Text);
            lst = sistema.traerCliente(id);
            apellido.Text = lst[0];
            nombre.Text = lst[1];
        }

        private void toolStripLabel1_Click(object sender, EventArgs e)
        {
            try
            {
                int resp = sistema.realizarReserva(int.Parse(idCliente.Text.Trim()), int.Parse(numero.Text.Trim()), fchin.Value, fchout.Value);
                nroReserva.Text = resp.ToString().Trim();
                log.info(sistema.obtenerIdUsuarioLogueado(), "Creacion de nueva Reserva. IdReserva: " + resp.ToString() + " - IdCliente: " + idCliente.Text.Trim() + " - NumHabitacion: "+numero.Text.Trim());
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

        private void idCliente_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyValue == 113 /* F2 */ )
            {
                ListadoClientes lc = new ListadoClientes();
                lc.ShowDialog(this);
            }
            else if (e.KeyValue == 13 /* Enter */)
                if (idCliente.Text != "")
                {
                    string[] cliente = sistema.traerCliente(int.Parse(idCliente.Text));
                    setCliente(cliente[0], cliente[1], cliente[2]);
                }
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (fchin.Value >= fchout.Value)
            {
                MessageBox.Show("La fecha de CheckOut debe ser mayor que la fecha de CheckIn!");
            }
            else
            {
                ConsultaDisponibilidadHabitaciones cds = new ConsultaDisponibilidadHabitaciones(fchin.Value, fchout.Value);
                cds.ShowDialog(this);
            }
            
        }

        public void setHabitacion(string idHab)
        {
            numero.Text = idHab;
        }

        private void btnBuscarReservas_Click(object sender, EventArgs e)
        {
            BuscarReservas b = new BuscarReservas();
            b.ShowDialog(this);
        }


        public void setReserva(string reserva)
        {
            this.nroReserva.Text = reserva;
        }
    }
}
